local unpack = unpack or table.unpack

---解决原生unpack的nil截断问题，SafePack与SafeUnpack要成对使用
---@param safe_pack_tb table
function SafeUnpack(safe_pack_tb)
    return unpack(safe_pack_tb, 1, safe_pack_tb.n)
end

---解决原生pack的nil截断问题，SafePack与SafeUnpack要成对使用
function SafePack(...)
    local params = { ... }
    params.n = select("#", ...)
    return params
end

function IsSet(hashtable, key)
    local t = type(hashtable)
    local b = (t == "table" or t == "userdata");
    return b and hashtable[key] ~= nil
end

function GetDir(path)
    return string.match(path, ".*/")
end

function GetFileName(path)
    return string.match(path, ".*/(.*)")
end

--unity 对象判断为空, 如果你有些对象是在c#删掉了，lua 不知道
--判断这种对象为空时可以用下面这个函数。
function IsNil(uobj)
    return uobj == nil or uobj:Equals(nil)
end

function handler(obj, method)
    return function(...)
        return method(obj, ...)
    end
end